1 /* 2 3 Boost Software License - Version 1.0 - August 17th, 2003 4 5 Permission is hereby granted, free of charge, to any person or organization 6 obtaining a copy of the software and accompanying documentation covered by 7 this license (the "Software") to use, reproduce, display, distribute, 8 execute, and transmit the Software, and to prepare derivative works of the 9 Software, and to permit third-parties to whom the Software is furnished to 10 do so, all subject to the following: 11 12 The copyright notices in the Software and this entire statement, including 13 the above license grant, this restriction and the following disclaimer, 14 must be included in all copies of the Software, in whole or in part, and 15 all derivative works of the Software, unless such copies or derivative 16 works are solely in the form of machine-executable object code generated by 17 a source language processor. 18 19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 DEALINGS IN THE SOFTWARE. 26 27 */ 28 29 module derelict.purple.status; 30 31 import derelict.glib.gtypes; 32 import derelict.glib.glibconfig; 33 import derelict.glib.glist; 34 import derelict.purple.value; 35 import derelict.purple.account; 36 import derelict.purple.conversation; 37 import derelict.purple.blist; 38 import core.stdc.time; 39 import std.c.stdarg; 40 41 extern (C): 42 43 alias _PurpleStatusType PurpleStatusType; 44 alias _PurpleStatusAttr PurpleStatusAttr; 45 alias _PurplePresence PurplePresence; 46 alias _PurpleStatus PurpleStatus; 47 alias _PurpleMood PurpleMood; 48 alias _Anonymous_0 PurplePresenceContext; 49 alias _Anonymous_1 PurpleStatusPrimitive; 50 51 enum _Anonymous_0 52 { 53 PURPLE_PRESENCE_CONTEXT_UNSET = 0, 54 PURPLE_PRESENCE_CONTEXT_ACCOUNT = 1, 55 PURPLE_PRESENCE_CONTEXT_CONV = 2, 56 PURPLE_PRESENCE_CONTEXT_BUDDY = 3 57 } 58 59 enum _Anonymous_1 60 { 61 PURPLE_STATUS_UNSET = 0, 62 PURPLE_STATUS_OFFLINE = 1, 63 PURPLE_STATUS_AVAILABLE = 2, 64 PURPLE_STATUS_UNAVAILABLE = 3, 65 PURPLE_STATUS_INVISIBLE = 4, 66 PURPLE_STATUS_AWAY = 5, 67 PURPLE_STATUS_EXTENDED_AWAY = 6, 68 PURPLE_STATUS_MOBILE = 7, 69 PURPLE_STATUS_TUNE = 8, 70 PURPLE_STATUS_MOOD = 9, 71 PURPLE_STATUS_NUM_PRIMITIVES = 10 72 } 73 74 struct _PurpleMood 75 { 76 const(char)* mood; 77 const(char)* description; 78 gpointer* padding; 79 } 80 81 struct _PurpleStatus; 82 83 84 struct _PurpleStatusAttr; 85 86 87 struct _PurplePresence; 88 89 90 struct _PurpleStatusType; 91 92 93 version(Derelict_Link_Static) 94 { 95 extern( C ) nothrow 96 { 97 const(char)* purple_primitive_get_id_from_type(PurpleStatusPrimitive type); 98 const(char)* purple_primitive_get_name_from_type(PurpleStatusPrimitive type); 99 PurpleStatusPrimitive purple_primitive_get_type_from_id(const(char)* id); 100 PurpleStatusType* purple_status_type_new_full(PurpleStatusPrimitive primitive, const(char)* id, const(char)* name, gboolean saveable, gboolean user_settable, gboolean independent); 101 PurpleStatusType* purple_status_type_new(PurpleStatusPrimitive primitive, const(char)* id, const(char)* name, gboolean user_settable); 102 PurpleStatusType* purple_status_type_new_with_attrs(PurpleStatusPrimitive primitive, const(char)* id, const(char)* name, gboolean saveable, gboolean user_settable, gboolean independent, const(char)* attr_id, const(char)* attr_name, PurpleValue* attr_value, ...); 103 void purple_status_type_destroy(PurpleStatusType* status_type); 104 void purple_status_type_set_primary_attr(PurpleStatusType* status_type, const(char)* attr_id); 105 void purple_status_type_add_attr(PurpleStatusType* status_type, const(char)* id, const(char)* name, PurpleValue* value); 106 void purple_status_type_add_attrs(PurpleStatusType* status_type, const(char)* id, const(char)* name, PurpleValue* value, ...); 107 void purple_status_type_add_attrs_vargs(PurpleStatusType* status_type, va_list args); 108 PurpleStatusPrimitive purple_status_type_get_primitive(const(PurpleStatusType)* status_type); 109 const(char)* purple_status_type_get_id(const(PurpleStatusType)* status_type); 110 const(char)* purple_status_type_get_name(const(PurpleStatusType)* status_type); 111 gboolean purple_status_type_is_saveable(const(PurpleStatusType)* status_type); 112 gboolean purple_status_type_is_user_settable(const(PurpleStatusType)* status_type); 113 gboolean purple_status_type_is_independent(const(PurpleStatusType)* status_type); 114 gboolean purple_status_type_is_exclusive(const(PurpleStatusType)* status_type); 115 gboolean purple_status_type_is_available(const(PurpleStatusType)* status_type); 116 const(char)* purple_status_type_get_primary_attr(const(PurpleStatusType)* type); 117 PurpleStatusAttr* purple_status_type_get_attr(const(PurpleStatusType)* status_type, const(char)* id); 118 GList* purple_status_type_get_attrs(const(PurpleStatusType)* status_type); 119 const(PurpleStatusType)* purple_status_type_find_with_id(GList* status_types, const(char)* id); 120 PurpleStatusAttr* purple_status_attr_new(const(char)* id, const(char)* name, PurpleValue* value_type); 121 void purple_status_attr_destroy(PurpleStatusAttr* attr); 122 const(char)* purple_status_attr_get_id(const(PurpleStatusAttr)* attr); 123 const(char)* purple_status_attr_get_name(const(PurpleStatusAttr)* attr); 124 PurpleValue* purple_status_attr_get_value(const(PurpleStatusAttr)* attr); 125 PurpleStatus* purple_status_new(PurpleStatusType* status_type, PurplePresence* presence); 126 void purple_status_destroy(PurpleStatus* status); 127 void purple_status_set_active(PurpleStatus* status, gboolean active); 128 void purple_status_set_active_with_attrs(PurpleStatus* status, gboolean active, va_list args); 129 void purple_status_set_active_with_attrs_list(PurpleStatus* status, gboolean active, GList* attrs); 130 void purple_status_set_attr_boolean(PurpleStatus* status, const(char)* id, gboolean value); 131 void purple_status_set_attr_int(PurpleStatus* status, const(char)* id, int value); 132 void purple_status_set_attr_string(PurpleStatus* status, const(char)* id, const(char)* value); 133 PurpleStatusType* purple_status_get_type(const(PurpleStatus)* status); 134 PurplePresence* purple_status_get_presence(const(PurpleStatus)* status); 135 const(char)* purple_status_get_id(const(PurpleStatus)* status); 136 const(char)* purple_status_get_name(const(PurpleStatus)* status); 137 gboolean purple_status_is_independent(const(PurpleStatus)* status); 138 gboolean purple_status_is_exclusive(const(PurpleStatus)* status); 139 gboolean purple_status_is_available(const(PurpleStatus)* status); 140 gboolean purple_status_is_active(const(PurpleStatus)* status); 141 gboolean purple_status_is_online(const(PurpleStatus)* status); 142 PurpleValue* purple_status_get_attr_value(const(PurpleStatus)* status, const(char)* id); 143 gboolean purple_status_get_attr_boolean(const(PurpleStatus)* status, const(char)* id); 144 int purple_status_get_attr_int(const(PurpleStatus)* status, const(char)* id); 145 const(char)* purple_status_get_attr_string(const(PurpleStatus)* status, const(char)* id); 146 gint purple_status_compare(const(PurpleStatus)* status1, const(PurpleStatus)* status2); 147 PurplePresence* purple_presence_new(PurplePresenceContext context); 148 PurplePresence* purple_presence_new_for_account(PurpleAccount* account); 149 PurplePresence* purple_presence_new_for_conv(PurpleConversation* conv); 150 PurplePresence* purple_presence_new_for_buddy(PurpleBuddy* buddy); 151 void purple_presence_destroy(PurplePresence* presence); 152 void purple_presence_add_status(PurplePresence* presence, PurpleStatus* status); 153 void purple_presence_add_list(PurplePresence* presence, GList* source_list); 154 void purple_presence_set_status_active(PurplePresence* presence, const(char)* status_id, gboolean active); 155 void purple_presence_switch_status(PurplePresence* presence, const(char)* status_id); 156 void purple_presence_set_idle(PurplePresence* presence, gboolean idle, time_t idle_time); 157 void purple_presence_set_login_time(PurplePresence* presence, time_t login_time); 158 PurplePresenceContext purple_presence_get_context(const(PurplePresence)* presence); 159 PurpleAccount* purple_presence_get_account(const(PurplePresence)* presence); 160 PurpleConversation* purple_presence_get_conversation(const(PurplePresence)* presence); 161 const(char)* purple_presence_get_chat_user(const(PurplePresence)* presence); 162 PurpleBuddy* purple_presence_get_buddy(const(PurplePresence)* presence); 163 GList* purple_presence_get_statuses(const(PurplePresence)* presence); 164 PurpleStatus* purple_presence_get_status(const(PurplePresence)* presence, const(char)* status_id); 165 PurpleStatus* purple_presence_get_active_status(const(PurplePresence)* presence); 166 gboolean purple_presence_is_available(const(PurplePresence)* presence); 167 gboolean purple_presence_is_online(const(PurplePresence)* presence); 168 gboolean purple_presence_is_status_active(const(PurplePresence)* presence, const(char)* status_id); 169 gboolean purple_presence_is_status_primitive_active(const(PurplePresence)* presence, PurpleStatusPrimitive primitive); 170 gboolean purple_presence_is_idle(const(PurplePresence)* presence); 171 time_t purple_presence_get_idle_time(const(PurplePresence)* presence); 172 time_t purple_presence_get_login_time(const(PurplePresence)* presence); 173 gint purple_presence_compare(const(PurplePresence)* presence1, const(PurplePresence)* presence2); 174 void* purple_status_get_handle(); 175 void purple_status_init(); 176 void purple_status_uninit(); 177 } 178 } 179 else 180 { 181 extern( C ) nothrow 182 { 183 alias da_purple_primitive_get_id_from_type = const(char)* function(PurpleStatusPrimitive type); 184 alias da_purple_primitive_get_name_from_type = const(char)* function(PurpleStatusPrimitive type); 185 alias da_purple_primitive_get_type_from_id = PurpleStatusPrimitive function(const(char)* id); 186 alias da_purple_status_type_new_full = PurpleStatusType* function(PurpleStatusPrimitive primitive, const(char)* id, const(char)* name, gboolean saveable, gboolean user_settable, gboolean independent); 187 alias da_purple_status_type_new = PurpleStatusType* function(PurpleStatusPrimitive primitive, const(char)* id, const(char)* name, gboolean user_settable); 188 alias da_purple_status_type_new_with_attrs = PurpleStatusType* function(PurpleStatusPrimitive primitive, const(char)* id, const(char)* name, gboolean saveable, gboolean user_settable, gboolean independent, const(char)* attr_id, const(char)* attr_name, PurpleValue* attr_value, ...); 189 alias da_purple_status_type_destroy = void function(PurpleStatusType* status_type); 190 alias da_purple_status_type_set_primary_attr = void function(PurpleStatusType* status_type, const(char)* attr_id); 191 alias da_purple_status_type_add_attr = void function(PurpleStatusType* status_type, const(char)* id, const(char)* name, PurpleValue* value); 192 alias da_purple_status_type_add_attrs = void function(PurpleStatusType* status_type, const(char)* id, const(char)* name, PurpleValue* value, ...); 193 alias da_purple_status_type_add_attrs_vargs = void function(PurpleStatusType* status_type, va_list args); 194 alias da_purple_status_type_get_primitive = PurpleStatusPrimitive function(const(PurpleStatusType)* status_type); 195 alias da_purple_status_type_get_id = const(char)* function(const(PurpleStatusType)* status_type); 196 alias da_purple_status_type_get_name = const(char)* function(const(PurpleStatusType)* status_type); 197 alias da_purple_status_type_is_saveable = gboolean function(const(PurpleStatusType)* status_type); 198 alias da_purple_status_type_is_user_settable = gboolean function(const(PurpleStatusType)* status_type); 199 alias da_purple_status_type_is_independent = gboolean function(const(PurpleStatusType)* status_type); 200 alias da_purple_status_type_is_exclusive = gboolean function(const(PurpleStatusType)* status_type); 201 alias da_purple_status_type_is_available = gboolean function(const(PurpleStatusType)* status_type); 202 alias da_purple_status_type_get_primary_attr = const(char)* function(const(PurpleStatusType)* type); 203 alias da_purple_status_type_get_attr = PurpleStatusAttr* function(const(PurpleStatusType)* status_type, const(char)* id); 204 alias da_purple_status_type_get_attrs = GList* function(const(PurpleStatusType)* status_type); 205 alias da_purple_status_type_find_with_id = const(PurpleStatusType)* function(GList* status_types, const(char)* id); 206 alias da_purple_status_attr_new = PurpleStatusAttr* function(const(char)* id, const(char)* name, PurpleValue* value_type); 207 alias da_purple_status_attr_destroy = void function(PurpleStatusAttr* attr); 208 alias da_purple_status_attr_get_id = const(char)* function(const(PurpleStatusAttr)* attr); 209 alias da_purple_status_attr_get_name = const(char)* function(const(PurpleStatusAttr)* attr); 210 alias da_purple_status_attr_get_value = PurpleValue* function(const(PurpleStatusAttr)* attr); 211 alias da_purple_status_new = PurpleStatus* function(PurpleStatusType* status_type, PurplePresence* presence); 212 alias da_purple_status_destroy = void function(PurpleStatus* status); 213 alias da_purple_status_set_active = void function(PurpleStatus* status, gboolean active); 214 alias da_purple_status_set_active_with_attrs = void function(PurpleStatus* status, gboolean active, va_list args); 215 alias da_purple_status_set_active_with_attrs_list = void function(PurpleStatus* status, gboolean active, GList* attrs); 216 alias da_purple_status_set_attr_boolean = void function(PurpleStatus* status, const(char)* id, gboolean value); 217 alias da_purple_status_set_attr_int = void function(PurpleStatus* status, const(char)* id, int value); 218 alias da_purple_status_set_attr_string = void function(PurpleStatus* status, const(char)* id, const(char)* value); 219 alias da_purple_status_get_type = PurpleStatusType* function(const(PurpleStatus)* status); 220 alias da_purple_status_get_presence = PurplePresence* function(const(PurpleStatus)* status); 221 alias da_purple_status_get_id = const(char)* function(const(PurpleStatus)* status); 222 alias da_purple_status_get_name = const(char)* function(const(PurpleStatus)* status); 223 alias da_purple_status_is_independent = gboolean function(const(PurpleStatus)* status); 224 alias da_purple_status_is_exclusive = gboolean function(const(PurpleStatus)* status); 225 alias da_purple_status_is_available = gboolean function(const(PurpleStatus)* status); 226 alias da_purple_status_is_active = gboolean function(const(PurpleStatus)* status); 227 alias da_purple_status_is_online = gboolean function(const(PurpleStatus)* status); 228 alias da_purple_status_get_attr_value = PurpleValue* function(const(PurpleStatus)* status, const(char)* id); 229 alias da_purple_status_get_attr_boolean = gboolean function(const(PurpleStatus)* status, const(char)* id); 230 alias da_purple_status_get_attr_int = int function(const(PurpleStatus)* status, const(char)* id); 231 alias da_purple_status_get_attr_string = const(char)* function(const(PurpleStatus)* status, const(char)* id); 232 alias da_purple_status_compare = gint function(const(PurpleStatus)* status1, const(PurpleStatus)* status2); 233 alias da_purple_presence_new = PurplePresence* function(PurplePresenceContext context); 234 alias da_purple_presence_new_for_account = PurplePresence* function(PurpleAccount* account); 235 alias da_purple_presence_new_for_conv = PurplePresence* function(PurpleConversation* conv); 236 alias da_purple_presence_new_for_buddy = PurplePresence* function(PurpleBuddy* buddy); 237 alias da_purple_presence_destroy = void function(PurplePresence* presence); 238 alias da_purple_presence_add_status = void function(PurplePresence* presence, PurpleStatus* status); 239 alias da_purple_presence_add_list = void function(PurplePresence* presence, GList* source_list); 240 alias da_purple_presence_set_status_active = void function(PurplePresence* presence, const(char)* status_id, gboolean active); 241 alias da_purple_presence_switch_status = void function(PurplePresence* presence, const(char)* status_id); 242 alias da_purple_presence_set_idle = void function(PurplePresence* presence, gboolean idle, time_t idle_time); 243 alias da_purple_presence_set_login_time = void function(PurplePresence* presence, time_t login_time); 244 alias da_purple_presence_get_context = PurplePresenceContext function(const(PurplePresence)* presence); 245 alias da_purple_presence_get_account = PurpleAccount* function(const(PurplePresence)* presence); 246 alias da_purple_presence_get_conversation = PurpleConversation* function(const(PurplePresence)* presence); 247 alias da_purple_presence_get_chat_user = const(char)* function(const(PurplePresence)* presence); 248 alias da_purple_presence_get_buddy = PurpleBuddy* function(const(PurplePresence)* presence); 249 alias da_purple_presence_get_statuses = GList* function(const(PurplePresence)* presence); 250 alias da_purple_presence_get_status = PurpleStatus* function(const(PurplePresence)* presence, const(char)* status_id); 251 alias da_purple_presence_get_active_status = PurpleStatus* function(const(PurplePresence)* presence); 252 alias da_purple_presence_is_available = gboolean function(const(PurplePresence)* presence); 253 alias da_purple_presence_is_online = gboolean function(const(PurplePresence)* presence); 254 alias da_purple_presence_is_status_active = gboolean function(const(PurplePresence)* presence, const(char)* status_id); 255 alias da_purple_presence_is_status_primitive_active = gboolean function(const(PurplePresence)* presence, PurpleStatusPrimitive primitive); 256 alias da_purple_presence_is_idle = gboolean function(const(PurplePresence)* presence); 257 alias da_purple_presence_get_idle_time = time_t function(const(PurplePresence)* presence); 258 alias da_purple_presence_get_login_time = time_t function(const(PurplePresence)* presence); 259 alias da_purple_presence_compare = gint function(const(PurplePresence)* presence1, const(PurplePresence)* presence2); 260 alias da_purple_status_get_handle = void* function(); 261 alias da_purple_status_init = void function(); 262 alias da_purple_status_uninit = void function(); 263 } 264 265 __gshared 266 { 267 da_purple_primitive_get_id_from_type purple_primitive_get_id_from_type; 268 da_purple_primitive_get_name_from_type purple_primitive_get_name_from_type; 269 da_purple_primitive_get_type_from_id purple_primitive_get_type_from_id; 270 da_purple_status_type_new_full purple_status_type_new_full; 271 da_purple_status_type_new purple_status_type_new; 272 da_purple_status_type_new_with_attrs purple_status_type_new_with_attrs; 273 da_purple_status_type_destroy purple_status_type_destroy; 274 da_purple_status_type_set_primary_attr purple_status_type_set_primary_attr; 275 da_purple_status_type_add_attr purple_status_type_add_attr; 276 da_purple_status_type_add_attrs purple_status_type_add_attrs; 277 da_purple_status_type_add_attrs_vargs purple_status_type_add_attrs_vargs; 278 da_purple_status_type_get_primitive purple_status_type_get_primitive; 279 da_purple_status_type_get_id purple_status_type_get_id; 280 da_purple_status_type_get_name purple_status_type_get_name; 281 da_purple_status_type_is_saveable purple_status_type_is_saveable; 282 da_purple_status_type_is_user_settable purple_status_type_is_user_settable; 283 da_purple_status_type_is_independent purple_status_type_is_independent; 284 da_purple_status_type_is_exclusive purple_status_type_is_exclusive; 285 da_purple_status_type_is_available purple_status_type_is_available; 286 da_purple_status_type_get_primary_attr purple_status_type_get_primary_attr; 287 da_purple_status_type_get_attr purple_status_type_get_attr; 288 da_purple_status_type_get_attrs purple_status_type_get_attrs; 289 da_purple_status_type_find_with_id purple_status_type_find_with_id; 290 da_purple_status_attr_new purple_status_attr_new; 291 da_purple_status_attr_destroy purple_status_attr_destroy; 292 da_purple_status_attr_get_id purple_status_attr_get_id; 293 da_purple_status_attr_get_name purple_status_attr_get_name; 294 da_purple_status_attr_get_value purple_status_attr_get_value; 295 da_purple_status_new purple_status_new; 296 da_purple_status_destroy purple_status_destroy; 297 da_purple_status_set_active purple_status_set_active; 298 da_purple_status_set_active_with_attrs purple_status_set_active_with_attrs; 299 da_purple_status_set_active_with_attrs_list purple_status_set_active_with_attrs_list; 300 da_purple_status_set_attr_boolean purple_status_set_attr_boolean; 301 da_purple_status_set_attr_int purple_status_set_attr_int; 302 da_purple_status_set_attr_string purple_status_set_attr_string; 303 da_purple_status_get_type purple_status_get_type; 304 da_purple_status_get_presence purple_status_get_presence; 305 da_purple_status_get_id purple_status_get_id; 306 da_purple_status_get_name purple_status_get_name; 307 da_purple_status_is_independent purple_status_is_independent; 308 da_purple_status_is_exclusive purple_status_is_exclusive; 309 da_purple_status_is_available purple_status_is_available; 310 da_purple_status_is_active purple_status_is_active; 311 da_purple_status_is_online purple_status_is_online; 312 da_purple_status_get_attr_value purple_status_get_attr_value; 313 da_purple_status_get_attr_boolean purple_status_get_attr_boolean; 314 da_purple_status_get_attr_int purple_status_get_attr_int; 315 da_purple_status_get_attr_string purple_status_get_attr_string; 316 da_purple_status_compare purple_status_compare; 317 da_purple_presence_new purple_presence_new; 318 da_purple_presence_new_for_account purple_presence_new_for_account; 319 da_purple_presence_new_for_conv purple_presence_new_for_conv; 320 da_purple_presence_new_for_buddy purple_presence_new_for_buddy; 321 da_purple_presence_destroy purple_presence_destroy; 322 da_purple_presence_add_status purple_presence_add_status; 323 da_purple_presence_add_list purple_presence_add_list; 324 da_purple_presence_set_status_active purple_presence_set_status_active; 325 da_purple_presence_switch_status purple_presence_switch_status; 326 da_purple_presence_set_idle purple_presence_set_idle; 327 da_purple_presence_set_login_time purple_presence_set_login_time; 328 da_purple_presence_get_context purple_presence_get_context; 329 da_purple_presence_get_account purple_presence_get_account; 330 da_purple_presence_get_conversation purple_presence_get_conversation; 331 da_purple_presence_get_chat_user purple_presence_get_chat_user; 332 da_purple_presence_get_buddy purple_presence_get_buddy; 333 da_purple_presence_get_statuses purple_presence_get_statuses; 334 da_purple_presence_get_status purple_presence_get_status; 335 da_purple_presence_get_active_status purple_presence_get_active_status; 336 da_purple_presence_is_available purple_presence_is_available; 337 da_purple_presence_is_online purple_presence_is_online; 338 da_purple_presence_is_status_active purple_presence_is_status_active; 339 da_purple_presence_is_status_primitive_active purple_presence_is_status_primitive_active; 340 da_purple_presence_is_idle purple_presence_is_idle; 341 da_purple_presence_get_idle_time purple_presence_get_idle_time; 342 da_purple_presence_get_login_time purple_presence_get_login_time; 343 da_purple_presence_compare purple_presence_compare; 344 da_purple_status_get_handle purple_status_get_handle; 345 da_purple_status_init purple_status_init; 346 da_purple_status_uninit purple_status_uninit; 347 } 348 }